/**
 * @brief    四节点壳单元使用的形函数，具有特别的积分点排序
 *
 * @version  0.1
 * @author   wanghuan
 * @date     2025.03.01
 *         _
 *     ___| |__   ___ _ __   __ _  ___  _ __   __ _
 *    / __| '_ \ / _ \ '_ \ / _` |/ _ \| '_ \ / _` |
 *    \__ \ | | |  __/ | | | (_| | (_) | | | | (_| |
 *    |___/_| |_|\___|_| |_|\__, |\___/|_| |_|\__, |
 *                          |___/             |___/
 * @copyright (c) 2025 by 神工仿真, All Rights Reserved.
 */

#pragma once
#include "DataStructure/Common/SGNamespace.h"
#include "DataStructure/Input/Solver/IntegPoint.h"

#include "../Common/IntegrationExport.h"
#include "SGFem/FEMSolverModule.h"

SG_FEMSOLVER_NAMESPACE_OPEN
namespace Element
{
    class Integration_DECLSPEC CQUAD43X3P
    {
    public:
        CQUAD43X3P ();
        ~CQUAD43X3P() = default;
        /// @brief 获取积分点数量
        std::size_t GetPointSize () const;
        /// @brief 通过索引获取积分点
        const SG::DataStructure::FEM::IntegPoint& GetPoint (std::size_t index) const;
        /// @brief 获得全部积分点
        const SG::DataStructure::FEM::IntegPointArray& GetPoints () const;

    private:
        SG::DataStructure::FEM::IntegPointArray integPointSet;
        static std::size_t nPoint;
    };

    inline std::size_t CQUAD43X3P::GetPointSize () const 
    {
        return CQUAD43X3P::nPoint;
    }

    inline const SG::DataStructure::FEM::IntegPoint& CQUAD43X3P::GetPoint (std::size_t index) const
    {
        return integPointSet[index];
    }

    inline const SG::DataStructure::FEM::IntegPointArray& CQUAD43X3P::GetPoints () const
    {
        return integPointSet;
    } 
};
SG_FEMSOLVER_NAMESPACE_CLOSE